package tests

import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import org.scalatest.Suite
import traits.TDescuentoHablateTodo
import traits.TDescuentoPlanAmigos
import traits.TDescuentoCiudadesAmigas
import comunicaciones.LlamadaLargaDistancia

@RunWith(classOf[JUnitRunner])
class TestLlamadaLargaDistancia extends Suite {

 //------------------Test obtener el precio de una llamada local con descuento hablate todo----------------------------------
  def testLargaDistanciaMayorA5MinutosConPlanHablateTodoEnFinDeSemana(){
      var call = new LlamadaLargaDistancia(0,301,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo{
          override def esDeFinDeSemana = true
      }
      var total = call.calcularPrecio
      println("Llamada con descuento duro: "+ call.duracion+" segs");
      println("Total 0: "+total);
      println()
        assert( total.round == 25)
  }
  
  def testLargaDistanciaMayorA5MinutosConPlanHablateTodoNoEsFinDeSemana(){
      var call = new LlamadaLargaDistancia(0,360,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo{
          override def esDeFinDeSemana = false
      }
      var total = call.calcularPrecio
      println("Llamada con descuento duro: "+ call.duracion+" segs");
      println("Total 1: "+total);
      println()
        assert( total.round == 31)
  }
  
//------------------Test obtener el precio de una llamada local con descuento hablate todo----------------------------------
  def testLargaDistanciaMayorA5MinutosConPlanNumerosAmigos(){
      var call = new LlamadaLargaDistancia(22222222,301,"Quilmes","Ezpeleta","") with TDescuentoPlanAmigos {
          override def numerosEnPlan = List(22222222)
      }
      var total = call.calcularPrecio
      println("Llamada con descuento duro: "+ call.duracion+" segs");
      println("Total 2: "+total);
      println()
        assert( total.round == 0)
  }
  
 def testLargaDistanciaMayorA5MinutosConPlanNumerosAmigosElNumNoEstaEnElPlan(){
      var call = new LlamadaLargaDistancia(22222222,360,"Quilmes","Ezpeleta","") with TDescuentoPlanAmigos {
          override def numerosEnPlan = List(22222252)
      }
      var total = call.calcularPrecio
      println("Llamada con descuento duro: "+ call.duracion+" segs");
      println("Total 3: "+total);
      println()
        assert( total.round == 31)
  }
 
//--------Test llamada local con numeros amigos y hablate todo-----------------------------------------------------------
 def testObtenerElPrecioDeUnaLargaDistanciaConPlanHablateTodoYNumsAmigos(){
    var call = new LlamadaLargaDistancia(3333333,360,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo with TDescuentoPlanAmigos{
          override def esDeFinDeSemana = true
          override def numerosEnPlan = List(3333333)
      }
    var total = call.calcularPrecio
    println("Llamada con descuento duro: "+ call.duracion+" segs");
    println("Total 4: "+total);
    println()
    assert( total.round == 0)
  } 
 
 def testObtenerElPrecioDeUnaLargaDistanciaConPlanHablateTodoYNumsAmigosElNumNoEstaEnPlan(){
    var call = new LlamadaLargaDistancia(22222222,301,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo with TDescuentoPlanAmigos{
          override def esDeFinDeSemana = true
          override def numerosEnPlan = List(3333533)
      }
    var total = call.calcularPrecio
    println("Llamada con descuento duro: "+ call.duracion+" segs");
    println("Total 5: "+total);
    println()
    assert( total.round == 25)
  } 
 
 def testObtenerElPrecioDeUnaLargaDistanciaConPlanHablateTodoYNumsAmigosYNoEsFinDeSemana(){
    var call = new LlamadaLargaDistancia(3333333,301,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo with TDescuentoPlanAmigos{
          override def esDeFinDeSemana = false
          override def numerosEnPlan = List(3333333)
      }
    var total = call.calcularPrecio
    println("Llamada con descuento duro: "+ call.duracion+" segs");
    println("Total 6: "+total);
    println()
    assert( total.round == 0)
  } 
  
 
 def testObtenerElPrecioDeUnaLargaDistanciaConPlanHablateTodoYNumsAmigosNoEstaEnPlanYNoEsFinDeSemana(){
    var call = new LlamadaLargaDistancia(22222222,360,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo with TDescuentoPlanAmigos{
          override def esDeFinDeSemana = false
          override def numerosEnPlan = List(3433333)
      }
    var total = call.calcularPrecio
    println("Llamada con descuento duro: "+ call.duracion+" segs");
    println("Total 7: "+total);
    println()
    assert( total.round == 31)
  } 
  
//-------------------Test calcular precio llamada larga distancia con plan ciudades amigas---------------------------------
 
 def testObteenrPrecioDeLlamadaLargaDistanciaConPlanCiudadesAmigas(){
   var call = new LlamadaLargaDistancia(22222222,360,"Quilmes","Ezpeleta","") with TDescuentoCiudadesAmigas{
     override def ciudadEnPlan = "Ezpeleta"
   }
   var total = call.calcularPrecio
   println("Llamada con descuento duro: "+ call.duracion+" segs");
   println("Total 8: "+total);
   println()
   assert( total.round == 0)
 }
 
 def testObteenrPrecioDeLlamadaLargaDistanciaConPlanCiudadesAmigasYLaCiudadNoEstaEnElPlan(){
   var call = new LlamadaLargaDistancia(22222222,360,"Quilmes","Ezpeleta","") with TDescuentoCiudadesAmigas{
     override def ciudadEnPlan = "Mongolia"
   }
   var total = call.calcularPrecio
   println("Llamada con descuento duro: "+ call.duracion+" segs");
   println("Total 9: "+total);
   println()
   assert( total.round == 31)
 }
 
//---------Test calcular precio de una llamada con Planes HablateTodo NumerosAmigos y CiudadesAmigas
 def testObtenerElPrecioDeUnaLargaDistanciaConPlanHablateTodoYNumsAmigosYCiudadesAmigas(){
    var call = new LlamadaLargaDistancia(3333333,360,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo with TDescuentoPlanAmigos  with TDescuentoCiudadesAmigas{
          override def esDeFinDeSemana = true
          override def numerosEnPlan = List(3333333)
          override def ciudadEnPlan = "Ezpeleta"
      }
    var total = call.calcularPrecio
    println("Llamada con descuento duro: "+ call.duracion+" segs");
    println("Total 10: "+total);
    println()
    assert( total.round == 0)
  }
 
  def testObtenerElPrecioDeUnaLargaDistanciaConPlanHablateTodoYNumsAmigosYCiudadesAmigasYCiudadYNumNoEstanEnPlan(){
    var call = new LlamadaLargaDistancia(3333333,360,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo with TDescuentoPlanAmigos  with TDescuentoCiudadesAmigas{
          override def esDeFinDeSemana = true
          override def numerosEnPlan = List(3333335)
          override def ciudadEnPlan = "Bernal"
      }
    var total = call.calcularPrecio
    println("Llamada con descuento duro: "+ call.duracion+" segs");
    println("Total 11: "+total);
    println()
    assert( total.round == 25)
  }
  
 def testObtenerElPrecioDeUnaLargaDistanciaConPlanHablateTodoYNumsAmigosYCiudadesAmigasYCiudadYNumNoEstanEnPlanYNoEsFinDeSemana(){
    var call = new LlamadaLargaDistancia(3333333,360,"Quilmes","Ezpeleta","") with TDescuentoHablateTodo with TDescuentoPlanAmigos  with TDescuentoCiudadesAmigas{
          override def esDeFinDeSemana = false
          override def numerosEnPlan = List(3333335)
          override def ciudadEnPlan = "Bernal"
      }
    var total = call.calcularPrecio
    println("Llamada con descuento duro: "+ call.duracion+" segs");
    println("Total 11: "+total);
    println()
    assert( total.round == 31)
  } 
 
 
}